OBJS=\
	context.o \
	draw.o \
	math.o \
	memo.o \
	print.o \
	proc.o \
	string.o \
	sysCall.o

compiler=\
	gcc

compilerArgs=\
	-c -std=c99 -pedantic -Wall -O2 -nostdinc -fno-stack-protector

ld=\
	ld

all: initCode kernel
	dd if=kernel	of=../smart-os.img seek=1 conv=notrunc

initCode: initCode.c sysCall.o
	$(compiler) -nostdinc -fno-stack-protector -c -I. initCode.c
	ld -N -e main -Ttext 0 -o initCode.out initCode.o sysCall.o
	objcopy -S -O binary initCode.out initCode
	objdump -S initCode.out > initCode.asm
	objdump -t initCode.out | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > initCode.sym

kernel:	main.c $(OBJS) ../boot/myPrintfDebug.o initCode
	gcc -c -std=c99 -pedantic -Wall -o aaa.o main.c
	ld -e myMain -Ttext 0x100000 -o kernel aaa.o $(OBJS) ../boot/myPrintfDebug.o -b binary initCode
	objdump -S kernel > testKernel.asm
	objdump -t kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernel.sym

context.o: context.s
	$(compiler) $(compilerArgs) context.s
	objdump -S context.o > context.asm

draw.o: draw.c
	$(compiler) $(compilerArgs) draw.c

math.o: math.c
	$(compiler) $(compilerArgs) math.c

memo.o: memo.c
	$(compiler) $(compilerArgs) memo.c

print.o: print.c
	$(compiler) $(compilerArgs) print.c

proc.o: proc.c
	$(compiler) $(compilerArgs) proc.c

string.o: string.c
	$(compiler) $(compilerArgs) string.c

sysCall.o: sysCall.c
	$(compiler) $(compilerArgs) sysCall.c


clean:
	rm -rf kernel
	rm -rf *.o *.sym *.asm
